package com.aididi.listener;

import com.netflix.appinfo.InstanceInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;

/**
 * @Auther: zx.xu
 * @Description:     Eureka事件监听
 *  　Eureka Server提供了五种服务监听事件。因为在某些业务场景下，我们需要做一些自定义的扩展。例如:某个微服务挂掉了，我们希望能监听到，并给管理员发送邮件通知。
 */
@Configuration
@Slf4j
public class EurekaStateListener {

    //服务下线事件
    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        log.error(event.getServerId() + "\t" + event.getAppName() + " 服务下线");
    }
    //服务注册事件
    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        log.info("服务{}进行注册", instanceInfo.getAppName()+ instanceInfo.getHostName() +"  "+ instanceInfo.getIPAddr() +"  "+ instanceInfo.getPort());
    }
    //服务续约事件
    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        log.error(event.getServerId() + "\t" + event.getAppName() + " 服务进行续约");
    }

    //Eureka注册中心启动事件
    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        log.error("注册中心 启动,{}",System.currentTimeMillis());
    }

    //Eureka Server启动时间
    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        log.error("Eureka Server 启动,{}", System.currentTimeMillis());
    }

}
